#ifndef prs_FrmBuildTemplate_H
#define prs_FrmBuildTemplate_H

#include "prs_FrmUseTemplate.h"
#include "prs_FrmPanel.h"
#include "prs_FrmString.h"
#include "prs_FrmString.h"
#include "prs_FrmButton.h"
#include "prs_FrmLine.h"
#include "prs_FrmPara.h"
#include "prs_FrmParaEdit.h"
#include "prs_FrmCol.h"
#include "prs_FrmRow.h"
#include "prs_FrmTable.h"
#include "prs_FrmSplitter.h"
#include "prs_FrmScrollBar.h"
#include "prs_FrmPageControl.h"
#include "prs_FrmFrame.h"
#include "prs_FrmImage.h"
#include "prs_Form.h"

namespace prs {

///////////////////////////////////////////////////////////////////////////////

struct TFrmBuildTemplate 
  :public svl::IVisitor<TNodeForm>
  ,public svl::IVisitor<TNodeFrmString>
  ,public svl::IVisitor<TNodeFrmPanel>
  ,public svl::IVisitor<TNodeFrmImage>
  ,public svl::IVisitor<TNodeFrmButton>
  ,public svl::IVisitor<TNodeFrmLine>
  ,public svl::IVisitor<TNodeFrmPara>
  ,public svl::IVisitor<TNodeFrmParaEdit>
  ,public svl::IVisitor<TNodeFrmCol>
  ,public svl::IVisitor<TNodeFrmRow>
  ,public svl::IVisitor<TNodeFrmRowCaption>
  ,public svl::IVisitor<TNodeFrmRowChildren>
  ,public svl::IVisitor<TNodeFrmRowExpand>
  ,public svl::IVisitor<TNodeFrmTable>
  ,public svl::IVisitor<TNodeFrmTableCaption>
  ,public svl::IVisitor<TNodeFrmTableGrid>
  ,public svl::IVisitor<TNodeFrmVSplitter>
  ,public svl::IVisitor<TNodeFrmHSplitter>
  ,public svl::IVisitor<TNodeFrmVScrollBar>
  ,public svl::IVisitor<TNodeFrmHScrollBar>
  ,public svl::IVisitor<TNodeFrmPageButton>
  ,public svl::IVisitor<TNodeFrmPageControl>
  ,public svl::IVisitor<TNodeFrmPage>
  ,public svl::IVisitor<TNodeFrmFrame>
  ,public svl::IVisitor<TNodeFrmFrameClient>

  ,public svl::IVisitor<TNodeUseTemplate>
  ,public svl::IVisitor<TNodeUseTemplateParam>
  ,public svl::IVisitor<TNodeUseTemplateBody>
  ,public svl::IVisitor<TFrmControlsValue>
{
  void Visit(TNodeForm &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmString   &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmPanel    &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmImage    &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmButton   &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmLine     &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmPara     &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmParaEdit &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmCol      &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmRow         &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmRowCaption  &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmRowChildren &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmRowExpand   &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmTable        &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmTableCaption &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmTableGrid    &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmVSplitter &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmHSplitter &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmVScrollBar &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmHScrollBar &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmPageControl &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmPageButton  &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmPage		 &Node)	{ Node.AcceptChildren(*this);}
  //
  void Visit(TNodeFrmFrame       &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeFrmFrameClient &Node) { Node.AcceptChildren(*this);}
  //
  void Visit(TNodeUseTemplate       &Node);
  void Visit(TNodeUseTemplateParam  &Node) { Node.AcceptChildren(*this);}
  void Visit(TNodeUseTemplateBody   &Node) { Node.AcceptChildren(*this);}
  
  void Visit(TFrmControlsValue &Node) { Node.AcceptChildren(*this);}
};

///////////////////////////////////////////////////////////////////////////////
}

#endif
